package JavaCollection;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapTraversal {

    // 静态成员变量 先于 静态代码块
    static Map<Integer, Integer> map;

    // 必须加 static 才在 初始化类的过程中，执行
    // 不加 static 必须 new MapTraversal(); 定义对象才 执行
     static {
        map = new HashMap<>();
        for (int i = 0; i < 3; i++) {
            map.put(i, i*i);
        }
    }

    // 遍历 map 一般使用 方法4 或 方法1
    public static void main(String[] args) {
//        new MapTraversal();  // 执行非  静态代码块

        // 方法1： 使用 entryset, 仅能遍历
        for (Map.Entry<Integer, Integer> entry:map.entrySet()) {
            System.out.println(entry.getKey() +": "+entry.getValue());
        }

        // 方法2： 使用 keyset，效率低
        for (Integer key: map.keySet()) {
            System.out.println( key +": "+ map.get(key));
        }

        // 方法3： 使用 keyset() 或 values ，仅能得到 键或值
        for (Integer key: map.keySet()) {
            System.out.println(key);
        }
        for (Integer value:map.values()) {
            System.out.println(value);
        }

        // 方法4：使用 entryset()的 iterator(), 适合 遍历时 删除
        Iterator<Map.Entry<Integer, Integer>> entriesIt = map.entrySet().iterator();
        while (entriesIt.hasNext())
        {
            Map.Entry<Integer, Integer> entry = entriesIt.next();
            System.out.println(entry.getKey() +": "+ entry.getValue());
        }


    }
}
